package com.sikaryofficial.backend.constant;

import lombok.AllArgsConstructor;
import lombok.Getter;

import java.util.Arrays;
import java.util.Objects;

/**
 * @author : qinjinyuan
 * @desc : 统计类型枚举
 * @date : 2023/11/06 16:31
 */
@Getter
@AllArgsConstructor
public enum MyStatisticsTypeEnum {

    /**
     * 0-评论发布;1-评论回复;2-活动预约;3-店铺收藏;4-店铺评价;5-产品分享;6-产品点赞;8-产品评价点赞;9-产品评价回复点赞;7-举报;10-产品收藏;11-店铺分享;12-举报已受理
     */
    COMMENTS_EVALUATE_NUM(0, "评论发布", true, true),
    COMMENTS_REPLAY_NUM(1, "评论回复", true, true),

    RESERVATION_NUM(2, "活动预约", true, true),

    COLLECTION_STORE_NUM(3, "店铺收藏", false, true),

    STORE_EVALUATE_NUM(4, "店铺评价", true, true),

    FORWARD_PRODUCT_NUM(5, "产品分享", true, false),

    LIKES_PRODUCT_NUM(6, "产品点赞", false, true),

    REPORT_NUM(7, "举报", true, true),
    LIKES_PRODUCT_EVALUATE_NUM(8, "产品评价点赞", false, true),
    LIKES_EVALUATE_REPLY_NUM(9, "产品评价回复点赞", false, true),
    COLLECTION_PRODUCT_NUM(10, "产品收藏", false, true),

    FORWARD_STORE_NUM(11, "店铺分享", true, false),

    /**
     * 30分钟 系统自动受理
     */
    REPORT_ACCEPTED_NUM(12, "举报已受理", true, true),

    /**
     * 产品评论总数
     */
    COMMENTS_PRODUCT_COUNT(13, "某产品评论总数", true, true),
    /**
     * 评论下回复总数
     */
    COMMENTS_EVALUATE_REPLAY_NUM(14, "某评论下总回复数", true, true),
    /**
     * 活动收藏
     */
    COLLECTION_ACTIVITY_NUM(15, "活动收藏", false, true),
    /**
     * 活动分享
     */
    FORWARD_ACTIVITY_NUM(16, "活动分享", true, false),
    RESERVATION_EXPIRE_NUM(17, "活动预约已过期", true, true),

    RESERVATION_AWARDS_NUM(19, "活动中奖数量", true, true),
    /**
     * 工单状态：0-受理中，1-已受理，2-完成
     */
    WORK_ORDER_ACCEPTING(20, "工单-受理中", true, true),
    /**
     * 点赞
     *
     */
    LIKES_ARTICLE(21, "文章点赞", true, true),
    LIKES_ARTICLE_EVALUATE(22, "文章评论点赞", true, true),
    LIKES_ARTICLE_EVALUATE_REPLY(23, "文章评论回复点赞", true, true),
    /**
     * 文章 转发 收藏
     *
     */
    COLLECTION_ARTICLE(24, "文章收藏", true, true),
    FORWARD_ARTICLE(25, "文章转发", true, false),

    /**
     * 文章的评论 （内部用）
     */
    COMMENTS_ARTICLE(26, "文章评论", true, true),
    COMMENTS_ARTICLE_REPLAY(29, "某文章评论回复", true, true),

    /**
     * 文章的评论总数 （内部用）
     */
    COMMENTS_ARTICLE_COUNT(27, "某文章评论总数", true, true),
    /**
     * 评论下回复总数（内部用）
     */
    COMMENTS_ARTICLE_REPLAY_COUNT(28, "某文章评论下总回复数", true, true),
    /**
     * 动态
     */
    ARTICLE_DYNAMIC_NUM(30, "文章-动态", false, true),
    /**
     * 长文
     */
    ARTICLE_LONG_NUM(31, "文章-动态", false, true),
    /**
     * 短视频
     */
    ARTICLE_SHORT_VIDEO_NUM(33, "文章-短视频", false, true),

    LIKES_STORE(34, "店铺点赞", true, true),
    COMMENTS_STORE(35, "店铺评论", true, true),
    COMMENTS_STORE_COUNT(36, "店铺评论总数", true, true),
    ;

    /**
     * `comments_publish_num` int DEFAULT '0' COMMENT '评论发布数量',
     * `comments_replay_num` int DEFAULT '0' COMMENT '评论回复数量',
     * `reservation_num` int DEFAULT '0' COMMENT '活动预约数量',
     * `collection_num` int DEFAULT '0' COMMENT '店铺收藏数量',
     * `shared_store_num` int DEFAULT '0' COMMENT '分享店铺数量',
     * `shared_comment_num` int DEFAULT '0' COMMENT '分享评论数量',
     * `likes_num` int DEFAULT '0' COMMENT '点赞数量',
     */
    private final Integer businessType;
    private final String name;

    /**
     * 是否累加计数：0-否，1-是
     */
    private final Boolean hasCountUp;

    /**
     * 是否减少计数：0-否，1-是
     */
    private final Boolean hasReduce;

    public static MyStatisticsTypeEnum getEnum(Integer businessType) {
        return Arrays.stream(MyStatisticsTypeEnum.values())
                .filter(pointRuleEnum -> Objects.nonNull(businessType) && pointRuleEnum.getBusinessType().equals(businessType))
                .findFirst().orElse(null);
    }
}
